﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace INSTA.AI97.EventsCreation
{
    // EVENT STEP 1:
    // Avant de pouvoir déclarer un event dans la classe
    // Person, il nous faut déclarer un delegate, qui définira
    // la signature de l'event.
    public delegate void NameChangedDelegate(object sender, PersonEventArgs e);

    class Person
    {
        // EVENT STEP 2
        // On déclare que notre classe Person possède maintenant
        // un event, nommé "NameChanged", et dont la signature
        // sera celle du delegate "NameChangedDelegate".
        public event NameChangedDelegate NameChanged;


        private string _name;
                
        
        public string Name
        {
            get { return _name;     }
            set 
            { 
                _name = value;    

                // EVENT STEP 3 :
                // On déclenche notre event, mais il nous faut 
                // d'abord nous assurer qu'il existe bien au moins
                // une procédure "abonnée" à notre event, ce que l'on
                // fait en comparant l'event à null (sinon une Exception
                // sera générée).
                if (NameChanged != null)
                {
                    NameChanged(this,                               
                                new PersonEventArgs(this.Name, 
                                                    this.YearOfBirth)
                                );                        
                }

            }
        }


        public string FisrstName    { get; set; }
        public int YearOfBirth      { get; set; }
    }
}
